avcodec/arm/sbcenc: avoid callee preserved vfp registers
authorJames Cowgill <jcowgill@debian.org>
Sun, 11 Aug 2019 15:50:56 +0000 (16:50 +0100)
committerSebastian Ramacher <sramacher@debian.org>
Tue, 2 Aug 2022 18:27:24 +0000 (19:27 +0100)
commite9460123e108ba1d01a5baff4da745d7c1b58a41
treeb2e8e4ebfe6c4b0ed0bd8c981812926ed4c0c29f
parent426891bfdf25059885d3e49eafa18a04aa8987a0
avcodec/arm/sbcenc: avoid callee preserved vfp registers

When compiling FFmpeg with GCC-9, some very random segfaults were
observed in code which had previously called down into the SBC encoder
NEON assembly routines. This was caused by these functions clobbering
some of the vfp callee saved registers (d8 - d15 aka q4 - q7). GCC was
using these registers to save local variables, but after these
functions returned, they would contain garbage.

Fix by reallocating the registers in the two affected functions in
the following way:
 ff_sbc_analyze_4_neon: q2-q5 => q8-q11, then q1-q4 => q8-q11
 ff_sbc_analyze_8_neon: q2-q9 => q8-q15

The reason for using these replacements is to keep closely related
sets of registers consecutively numbered which hopefully makes the
code more easy to follow. Since this commit only reallocates
registers, it should have no performance impact.

Signed-off-by: James Cowgill <jcowgill@debian.org>
Gbp-Pq: Name 0001-avcodec-arm-sbcenc-avoid-callee-preserved-vfp-regist.patch
libavcodec/arm/sbcdsp_neon.S